Operator CxpCamera

Operator Library: Hardware Platform

此運算子代表 CXP 相機與 VisualApplets 之間的影像資料介面。此運算子可用於單通道、雙通道或四通道 CXP 介面。介面類型是透過參數 ConnectionCount 來選取。無論相機傳遞何種格式,運算子都會輸出原始影像資料。接著,您需要將此影像資料轉換為相機所傳送的格式。若要轉換影像資料,請使用適當的運算子來進行聚合,並將原始位元組值轉型 (cast) 為像素值。運作期間的某些特定狀況可能會透過如下所述的事件系統進行通訊。此外,運算子還具有多個可用於發送信號以指示與相機連線狀態的參數。

若運算子偵測到影格大於或小於相機在 CXP 影像標頭中所宣告的大小,安全機制將會啟動。接著,運算子會切除超出範圍的像素與行,以便讓 VisualApplets 始終看到影像標頭中所定義的影格大小。如果影格的尺寸小於影像標頭中所指定的尺寸,運算子將會以未定義的資料填滿接收到的影格,以達到影像標頭中所定義的指定影格尺寸。填滿較小的影格可能會導致後續影格遺失。此遺失狀況將會以事件形式回報給軟體,同時尺寸不符的情況也會觸發事件。

適用於硬體平台
imaFlex CXP-12 Penta
imaFlex CXP-12 Quad

在 VisualApplets 中進行實例化

此運算子在其輸出 O 上提供影像資料。此輸出隨時存在。除了此標準輸出連接埠之外,您還可以針對 CXP 標頭中繼資料設定選用的 MetaDataO 輸出。在運算子實例化期間,會出現以下彈出式對話方塊:

您可以在此指定選用的中繼資料連接埠。如果您將連接埠可用性設為「0」(預設值),則運算子中將不會存在該連接埠。如果您將連接埠可用性設為 1,則該中繼資料連接埠將可在運算子介面中使用。

選用的 MetaDataO 連接埠

32 位元輸出的格式如以下圖片所示。

每個 CXP 影格都會提供相應且無錯誤的影像標頭。若影像標頭不正確,則不會有任何影像串流資料饋送至 VisualApplets 管線中。壓縮的影像標頭由 6 個字組組成。最後一個位元組用於附加資訊,僅供內部使用。特別是 HeaderError 位元可用於通知影像標頭本身是否發生錯誤。

影像標頭(Image Header) 描述
StreamId CXP 串流的 ID
Tag 16 位元來源影像索引。每傳輸一個影像就會遞增,在 0xFFFF 時會環繞歸零 (wraps around to 0)。包含與相同影像相關資料的每個串流(在多輸出端(multi-tap)串流的情況下)都應使用相同的數字。
XSize 代表影像寬度(以像素為單位)的 24 位元值。
XOff 代表影像相對於完整裝置影像最左側像素之水平偏移量(以像素為單位)的 24 位元值。
YSize 代表以像素為單位之影像高度的 24 位元值。針對線幅掃描影像,此值會設為 0。CameraScanMode 參數會始終顯示從此值讀取到的相機類型。如果 O.Img Protocol 設為 VALT_LINE1D,處理時將會忽略 YSize,且運算子會將所有送達的資料輸出為無盡的行串流。如果影像協定設為 VALT_IMAGE2D,YSize=0 也會導致無盡的行串流。
YOff 代表影像相對於完整裝置影像最頂端資料行之垂直偏移量(以像素為單位)的 24 位元值。對於線掃描影像,此值會設為 0。
DSizeL 代表每行影像之資料字組數的 24 位元值。
PixelF 代表 Pixel Format 的 16 位元值。
TapG 代表抽頭幾何形狀的 16 位元值。
Flags 影像旗標。
x-Mirror (尚未使用)。描述送達的影像是否經過 X 軸鏡射。
y-Mirror (尚未使用)。描述送達的影像是否經過 Y 軸鏡射。
HeaderError

1:影像標頭發生錯誤,且該影格被宣告為遺失。運算子輸出資料串流中不存在對應的影像資料。

0:影像標頭正確,且運算子輸出資料串流中存在對應的影像資料。

[重要] 影像協定:面陣與線掃描相機

影像協定對相機運算子輸出會有兩種不同的影響。

  • 來自 CXP 標頭的 YSize 值(0 = 線幅掃描;>0 = 面陣掃描)。

  • 運算子輸出端上所設定的協定 O.Img Protocol(VALT_LINE1D = 線幅掃描;VALT_IMAGE2D = 面陣掃描)。

CameraScanMode 參數會始終顯示從 CXP 標頭讀取到的相機類型。如果 O.Img Protocol 設為 VALT_LINE1D,處理時將會忽略 YSize,且運算子會將所有送達的資料輸出為無盡的行串流。如果影像協定設為 VALT_IMAGE2D,YSize=0 也會導致無盡的行串流,這會產生超過 O Max Img Height 的影像。過大的影像可能會在設計中接續於 CxpCamera 運算子之後的運算子中造成未定義的行為。為了避免這種情況,建議將送達的行串流分割為多個影像,例如使用 SplitImage 運算子。

裝置資源使用量

根據參數 ConnectionCount 的選擇,運算子會使用一個或多個類型為 CameraPort 的資源。對於事件 system,則會使用類型為 EventPort 的資源。如果 ConnectionCount 設為 X4(四通道),資源對話方塊將會顯示如下:

[重要] 修改影像寬度與影像高度

透過輸出連結的最大影像寬度和高度屬性,您可以將寬度和高度調整為相機特定的設定。不過,連接埠 O 上的最大影像寬度 必須能夠被連接埠 O 的 Parallelism 整除。因此,請確保最大影像寬度能夠被連接埠 O 的 Parallelism 整除!

錯誤處理與事件系統

當運算子偵測到接收並重建的影格大於或小於相機在 CXP 影像標頭中所宣告的大小,安全機制就會啟動。隨後,運算子會切除超出範圍的像素與行,以便後續的處理管線始終能看到影像標頭中所定義的影格大小。如果接收到的影格尺寸小於影像標頭中所指定的尺寸,運算子會以未定義的資料填滿接收到的影格,以達到影像標頭中所定義的指定影格尺寸。填滿較小的影格可能會導致後續的影格遺失。隨後,此遺失狀況會透過事件回報給軟體(請參閱下段說明)。尺寸不符的情況也會觸發事件。

For a set of very critical errors, the operator will forward asynchronous events to the host runtime software (Framegrabber SDK). The event name in the Framegrabber API is <hierarchical operator name>\CxpStreamStatus, e.g. Device1\Process0\Camera\CxpStreamStatus. The event payload is provided as four 16-bit data words. The event format is defined as follows:

  • word [0]:

    • bits [0:15]:發生事件所在的 CXP 影像標籤。

  • word [1]:

    • 位元 [8:15]:發生事件所在的串流 ID。

    • bits [0:7]:保留,視為不關心 (don't care)。

  • word [2]:

    • bit [0]:發生 CRC 錯誤。

    • 位元 [1]:在影像標頭中偵測到串流標記錯誤。

    • bit [2]:偵測到影像標頭中有無法修正的錯誤。

    • bit [3]:偵測到影格尺寸錯誤,亦即 CXP 影像標頭中定義的影像大小與從傳輸封包重建的影格大小不符。當相機在影像標頭中放入一項資訊,但傳輸的資料量卻與標頭中宣告的不同時,就會發生此情況。

    • bits [4:15]:保留,視為不關心 (don't care)。

  • word [3]:

    • bit [0]:事件類型,0 = Corrupted Entity,1 = Lost Entity。

      • Corrupted Entity 意指錯誤發生於某個影格內部,且該影格已經饋送至 VisualApplets 管線中。

      • Lost Entity 意指錯誤發生在影格被轉發至後續運算子之前,且該影格已被相機運算子捨棄。

      • 當觀察到損壞的實體時,運算子會根據 CXP 影像標頭定義來填滿影格,以便後續運算子不會產生未定義的行為。在此填滿過程中,可能會到達一個新影格並因而遺失。當相機根據影格標籤傳送帶有間隙的資料時,也會引發遺失實體事件。

    • bit [1]:發生類型為 Corrupted Entity 的事件遺失。這表示先前類型為 Corrupted Entity 的事件已經遺失。當執行階段軟體未對事件做出反應且內部事件佇setActive滿時,就會發生這種情況。

    • bit [2]:發生類型為 Lost Entity 的事件遺失。這表示先前類型為 Lost Entity 的事件已經遺失。當 執行階段軟體未對事件做出反應且內部 事件佇列滿載時,就會發生這種情況。

    • bits [3:15]:遺失的 Lost Entity 事件數量。

事件分為兩種類型:損壞實體的事件與遺失實體的事件。字 3 的 bit 0 描述發生了哪種事件。如果事件緩衝區已滿,可能會發生事件遺失的情況。當標記損壞實體的事件遺失時,將會設定字 3 的 bit 1。當標記遺失實體的事件遺失時,將會設定字 3 的 bit 2,並且 bit 3 至 15 將提供指示遺失影格的遺失事件數量。如果設定了 bit 2 但 Counter 為 0,則表示發生了 Counter 溢位。

每個事件都會觸發軟體中斷。為了減少事件數量,可能會將具有相同影格標記的多個事件合併在一起。在這種情況下,某些錯誤旗標會被組合。如果事件遺失,遺失事件之前的事件將包含有關遺失事件的資訊,且無法與具有相同影格標記的其他事件進行合併。

因 CRC 錯誤而引起的事件會回報一個影格標籤 (frame tag),該標籤可能與發生 CRC 錯誤的影格並非完全相關。影格標籤可能是前一個或後一個影格的標籤。這種情況只有在以下情況時才會發生:相機發送的 CXP 封包包含 2 個或多個影格之間的轉換。CRC 計算在封包結尾處完成,但串流資料是在執行階段動態重建的。這意味著可能會出現以下情況:在操作員已經發送前一個影格之後,才偵測到 CRC 錯誤。在正常情況下,如果相機封包不包含同時來自進行中影格結尾和下一個影格開頭的資料,則 CRC 錯誤期間的影格標籤將始終正確。對於所有其他情況,只要完整的影格串流資料小於 8k 的最大封包大小,在 1 個封包內可能只有 1 個影格重疊。在這種情況下,軟體應用程式應將帶有影格標籤 - 1 的前一個影格以及帶有影格標籤 + 1 的後一個影格也視為可能損毀。

I/O Properties

Property Value
Operator Type M
輸出連結 O,影像資料輸出
MetaDataO,選配的後設資料輸出

支援的 Link 格式

Link Parameter Output Link O 輸出 Link MetaDataO
Bit Width 32
Arithmetic unsigned unsigned
Parallelism 自動 1
Kernel Columns 1 1
Kernel Rows 1 1
Img Protocol {VALT_IMAGE2D, VALT_LINE1D} (default: VALT_IMAGE2D)1 {VALT_IMAGE2D, VALT_LINE1D, VALT_PIXEL0D} (default: VALT_IMAGE2D)
Color Format VAF_GRAY VAF_GRAY
Color Flavor FL_NONE FL_NONE
Max. Img Width 任意(預設值:1032) 6
Max. Img Height 任意(預設值:1032) 1

1

如果 O.Img Protocol 設定為 VALT_LINE1D,則在處理時會忽略 CXP 標頭中的 YSize 值,並且 operator 會將所有傳入的資料輸出為無間斷的行串流。如果影像 通訊協定設定為 VALT_IMAGE2D,YSize=0 (線形掃描相機) 也會導致 無間斷的行串流,進而產生超出 O.Max.Img.Height 的影像。

參數

ConnectionCount
Type Static Write parameter
Default X1
Range {X1, X2, X4}

參數 ConnectionCount 定義聚合至 CXP 連結的 CXP 通道數。所使用連接埠的索引由 CameraPort 類型的資源處理。連接埠資源的數量與連線數相符(例如 X2:兩個 CameraPort 資源項目)。

當您實體化一個以上的 CxpCamera 運算子(例如用於雙相機 Applet)時,如果使用了多個具有相同索引的資源,或者消耗的 CameraPort 資源數量超過最大值 4,可能會發生資源衝突。在這種情況下,設計規則檢查會回報錯誤。

ResetStatus
Type 動態寫入參數
Default 關閉
Range {Off, On}

參數 ResetStatus 會重設相機統計資料,也就是錯誤 Counter。

UsedConnections
Type 動態讀取參數
Default
Range {1,2,4}

參數 UsedConnections 顯示了由識別軟體在執行階段所配置的 CXP 通道數量。

PacketTagErrorCount
Type 動態讀取參數
Default
Range [0 : 8191]

參數 PacketTagErrorCount 顯示有多少 接收到的封包具有不符合 CXP 標準預期標籤的標籤。特別是,當在後續串流封包標籤列舉中觀察到間隙時,此值會向上計數。該參數寬度為 13 位元,其中 bits [11:0] 代表實際的 Counter 值,而 bit [12] 代表 Counter 溢位。當設定溢位位元時,應將 Counter 值視為無關緊要 (don't care)。

ImageTagErrorCount
Type 動態讀取參數
Default
Range [0 : 8191]

該參數用於計算影像標頭標籤、根據 CXP 標準預期的標籤以及接收到的標籤之間發生了多少次不匹配。該參數為 13 位元寬,其中位元 [11:0] 代表實際的 Counter 值,而位元 [12] 代表 Counter 溢位。當設定溢位位元時,該 Counter 值應視為無關緊要。

StreamIdErrorCount
Type 動態讀取參數
Default
Range [0 : 8191]

該參數用於計算封包中的接收串流 ID 值與影像標頭中指定的串流 ID 值不匹配的頻率。該參數為 13 位元寬,其中位元 [11:0] 代表實際的 Counter 值,而位元 [12] 代表 Counter 溢位。當設定溢位位元時,該 Counter 值應視為無關緊要。

CorrectedErrorCount
Type 動態讀取參數
Default
Range [0 : 8191]

該參數用於計算影像標頭或行標記中已檢測並修正的錯誤數量。該參數為 13 位元寬,其中位元 [11:0] 代表實際的 Counter 值,而位元 [12] 代表 Counter 溢位。當設定溢位位元時,該 Counter 值應視為無關緊要。

UncorrectedErrorCount
Type 動態讀取參數
Default
Range [0 : 8191]

該參數用於計算影像標頭或行標記中因同一位元組內有多個位元錯誤而無法修正的已檢測錯誤數量。該參數為 13 位元寬,其中位元 [11:0] 代表實際的 Counter 值,而位元 [12] 代表 Counter 溢位。當設定溢位位元時,該 Counter 值應視為無關緊要。

PacketBufferOverflowCount
Type 動態讀取參數
Default
Range [0 : 8191]

該參數用於計算在聚合模式下的通道繫結中封包緩衝區溢位發生的頻率。此參數僅適用於 ConnectionCount = X2 或 X4。該參數為 13 位元寬,其中位元 [11:0] 代表實際的 Counter 值,而位元 [12] 代表 Counter 溢位。當設定溢位位元時,該 Counter 值應視為無關緊要。

PacketBufferOverflowSource
Type 動態讀取參數
Default
Range [0x0 : 0xf]

該參數實作了一個位元遮罩,用於查詢封包緩衝區溢位發生在 4 個潛在 CXP 通道中的哪一個。參數寬度取決於 ConnectionCount 參數。在 X1 模式下,參數寬度為 1 位元;在 X2 模式下,參數寬度為 2 位元;在 X4 模式下,參數寬度為 4 位元。順序為:LSB = 最低 CXP 通道編號,MSB = 由操作員配置的最高 CXP 通道編號。

CameraScanMode
Type 動態讀取參數
Default
Range {area,line}

接收到的影像標頭帶有 相關資訊,指出串流是用於面陣掃描 (YSize > 0) 還是線形掃描 (YSize = 0) 應用程式。此參數顯示 最後一個有效接收的串流影像標頭資訊。

MarkerErrorCount
Type 動態讀取參數
Default
Range [0 : 8191]

此參數用於計算 CXP 串流標記與標頭或線標記之間的順序錯誤發生頻率。此參數為 13 位元寬,其中位元 [11:0] 代表實際的 Counter 值,而位元 [12] 代表 Counter 溢位。當設定溢位位元時,應將 Counter 值視為不影響 (don't care)。

UnexpectedStartupData
Type 動態讀取參數
Default
Range {false, true}

此參數用於偵測錯誤情況,即運算子重設後的第一個資料值非預期值(亦即先前未收到影像標頭)。這種情況可能是由於相機、擷取卡韌體實作有誤,或探索程序的軟體控制錯誤所造成。此外,相機硬體缺陷理論上也可能導致此情況。

FrameLostCount
Type 動態讀取參數
Default
Range [0 : 33554431]

此參數用於計算在擷取過程中遺失且未傳送至 VisualApplets 管線的影格。當偵測到影像標頭發生錯誤或某個影格與另一個影格重疊時,就會遺失影格。此參數為 25 位元寬,其中位元 [23:0] 代表實際的 Counter 值,而位元 [24] 代表 Counter 溢位。當設定溢位位元時,應將 Counter 值視為不影響 (don't care)。

FrameCorruptedCount
Type 動態讀取參數
Default
Range [0 : 33554431]

此參數用於計算擷取過程中損毀的影格。損毀的影格是指包含錯誤像素並傳送至 VisualApplets 管線的影格。此參數為 25 位元寬,其中位元 [23:0] 代表實際的 Counter 值,而位元 [24] 代表 Counter 溢位。當設定溢位位元時,應將 Counter 值視為不影響 (don't care)。

使用範例

operator CxpCamera 的使用方式如以下範例所示: